PAT--乙 1009 说反话

1009 说反话(题解)

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:

测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。

输出格式:

每个测试用例的输出占一行,输出倒序后的句子。

输入样例:

1
Hello World Here I Come

输出样例:

1
Come I Here World Hello

我的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
int main()
{
char c[90];
gets(c); //读入包含空格的字符串
int len=strlen(c);
int j=len-1,k;
while(j>=0)
{
for(k=j;k>=0;k--)//从后往前判断第一个为空格的字符,并记录下标
if(c[k]==' ')
break;
for(int l=k+1;l<=j;l++)//从空格下一个字符开始,从前往后,输出该单词。
printf("%c",c[l]);
if(k!=-1) //末尾输出换行
printf(" "); //否则输出一个单词,打印一个空格。
j=k-1;
}
return 0;
}

参考代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <string.h>
int main()
{
char str[90];
gets(str);
int len=strlen(str),r=0,h=0;
char ans[90][90]; //ans[0]-ans[r]存放单词
for(int i=0;i<len;i++)
{
if(str[i]!=' ')
{
ans[r][h++]=str[i];//如果不是空格,存放该字符
}
else
{//如果是空格,该单词结束,r+1,h=0
ans[r][h]='\0';//末尾是结束符\0
r++;
h=0;
}
}
for(int i=r;i>=0;i--)//倒着输出单词
{
printf("%s",ans[i]);
if(i>0)
printf(" ");
}
return 0;
}

最简单的代码:(需要用Ctrl + Z组合键告诉系统已经到了EOF)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main()
{
char ans[90][90];
int num=0;
while(scanf("%s",ans[num])==1)
{
num++;
}
for(int i=num-1;i>=0;i--)
{
printf("%s",ans[i]);
if(i>0)
printf(" ");
}
return 0;
}
小礼物走一个哟
0%